﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO.Projectos;
using DTO.Utilizadores;
using DTO;

namespace Contracts.Control
{

    public interface IGestaoProjectos
    {
        Projecto DevolveProjecto(int idProjecto);

        IEnumerable<Projecto> DevolveProjectosParaAnalise();
        IEnumerable<Projecto> DevolveProjectosParaDespachoAbertura();
        IEnumerable<Projecto> DevolveProjectosParaParecerTecnico();
        IEnumerable<Projecto> DevolveProjectosArquivados();
        IEnumerable<Projecto> DevolveProjectosDespachoDecisao();
        IEnumerable<Projecto> DevolveProjectosEmPagamento();
        IEnumerable<Projecto> DevolveProjectosparaReforçoFinanciamento();
        IEnumerable<Projecto> DevolveProjectosParaSuspender();
        IEnumerable<Projecto> DevolveProjectosParaReactivar();
        IEnumerable<Projecto> DevolveProjectosParaAlterarDados();
        IEnumerable<Projecto> DevolveTodosOsProjectos();

        void AdicionaProjecto(Projecto projecto);
        void AnaliseProjecto(int idProjecto, bool enquadrado, Tecnico t);
        void DespachoAbertura(int idProjecto, string despacho, Gestor gestor);
        void EmitirParecerTecnico(int idProjecto, string parecer, bool aceite, Gestor gestor);
        void ReenquadrarProjecto(int idProjecto);


        void DespachoDecisaoIncentivos(int idProjecto, string despacho, bool aceite, double custoElegivel, double montanteFinanciado, DateTime duracao);
        void DespachoDecisaoBonificacoes(int idProjecto, string despacho, bool aceite, double taxaAprovada, double montanteMaximo, DateTime duracao);
        void DespachoDecisaoTransformaBonificacao(int idProjecto, string despacho, double taxaAprovada, double montanteMaximo, DateTime duracao);

        bool EfectuaPagamento(int idProjecto, double montante);
        void PedeReforçoFinanciamento(int idProjecto, double montanteReforco);
        void SuspendeProjecto(int idProjecto);
        void ReactivarProjecto(int idProjecto);
        void AlterarDadosProjecto(Projecto p, Estados e);
    }
}
